const fp = require('./package/fp')
const {Maybe, Container} = require('./support')
// 练习1:使用fp.add(x, y)和 fp.map(f, x)创建一个能让functor里的值增加的函数ex1
let maybe = Maybe.of([5, 6, 1])
let ex1 = value => {
    let fn = fp.flowRight(fp.map(fp.add(value)));
    return maybe.map(fn)._value;
}
console.log(ex1(2))
//练习2:实现一个函数ex2，能够使用fp.first获取列表的第一个元素
let xs = Container.of(['do','ray','me','fa','so','la','ti','do'])
let ex2 =()=>{
    let fn = xs.map(fp.first)._value
    return fn
}
console.log(ex2(xs))
//练习3:实现一个函数ex3，使用safeProp和 fp.first找到user的名字的首字母
let safeProp = fp.curry(function (x,o) {
    return Maybe.of(o[x])
})
let user = {id:2,name:'Albert'}
let ex3 =value=>{
    let fn = safeProp('name',user).map(fp.first)._value
    return fn
}
console.log(ex3(user))
//练习4:使用Maybe重写ex4，不要有if语句
let ex4 = function (n) {
    if (n) {
        return parseInt(n)
    }
}
let changeex4 = value=>{
    let maybe = new Maybe(value)
    let fn = maybe.map(parseInt)
    return fn._value
}
console.log(changeex4(12.1))